package controllers;

import beans.InhoudBean1;
import connectivity.Dbmanager;
import connectivity.QueryManager;
import java.io.*;
import java.util.LinkedList;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.swing.JOptionPane;
import models.User;
import models.Vraag;
import tools.Encryptor;

public class ManageSelfTestController extends HttpServlet {

    private Dbmanager dbManager;
    private QueryManager queryManager;
    HttpSession sessie;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        sessie = request.getSession();

        dbManager = new Dbmanager();
        dbManager.openConnection();
        queryManager = new QueryManager(dbManager);
        LinkedList vragen = new LinkedList<Vraag>();
        Vraag vraag = new Vraag();
        String address = "";

        int module_id = 0;
        int course_id = 0;

        if (request.getParameter("moduleid") != null) {
            module_id = Integer.parseInt(request.getParameter("moduleid"));
            request.setAttribute("moduleid", module_id);       
        }
        if (request.getParameter("courseid") != null) {
            course_id = Integer.parseInt(request.getParameter("courseid"));
            request.setAttribute("courseid", course_id);
        }


        if (course_id != 0) {
            vragen = queryManager.getSelftestbycourse(course_id);
        } else if (module_id != 0) {
            vragen = queryManager.getSelftestbymodule(module_id);
        }

        if (request.getParameter("vraagid") != null) {
            Vraag aangepaste_vraag = new Vraag();
            aangepaste_vraag.setVraagid(Integer.parseInt(request.getParameter("vraagid")));

            if (request.getParameter("vraagstelling") != null) {
                aangepaste_vraag.setVraagstelling(request.getParameter("vraagstelling"));
            }

            if (request.getParameter("antwoord-a") != null) {
                aangepaste_vraag.setAntwoord_A(request.getParameter("antwoord-a"));
            }

            if (request.getParameter("antwoord-b") != null) {
                aangepaste_vraag.setAntwoord_B(request.getParameter("antwoord-b"));
            }

            if (request.getParameter("antwoord-c") != null) {
                aangepaste_vraag.setAntwoord_C(request.getParameter("antwoord-c"));
            }

            if (request.getParameter("antwoord-d") != null) {
                aangepaste_vraag.setAntwoord_D(request.getParameter("antwoord-d"));
            }

            if (request.getParameter("juiste-antwoord") != null) {
                aangepaste_vraag.setJuiste_antwoord(request.getParameter("juiste-antwoord"));
            } 
            queryManager.updateSelftest(aangepaste_vraag);
        }

        int currentvraag;
        InhoudBean1 inhoud = (InhoudBean1) sessie.getAttribute("inhoud");

        if (request.getParameter("submit") != null) {
            currentvraag = Integer.parseInt(request.getParameter("currentvraag"));

            if (request.getParameter("submit").equals("Volgende vraag")) {
                vraag = (Vraag) vragen.get(currentvraag + 1);
                currentvraag += 1;
                address = "/manage_selftest.jsp";
            } else if (request.getParameter("submit").equals("Vorige vraag")) {
                vraag = (Vraag) vragen.get(currentvraag - 1);
                currentvraag -= 1;
                address = "/manage_selftest.jsp";
            } else if (request.getParameter("submit").equals("Afronden")) {
                address = "subscribe_to_course";
            }

        } else {
            vraag = (Vraag) vragen.get(0);
            currentvraag = 0;
            address = "/manage_selftest.jsp";
        }

        request.setAttribute("aantalvragen", vragen.size());
        request.setAttribute("currentvraag", currentvraag);
        request.setAttribute("vraag", vraag);



        dbManager.closeConnection();
        RequestDispatcher dispatcher = request.getRequestDispatcher(address);
        dispatcher.forward(request, response); //Stuurt door naar de Gebruikers index
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        HttpSession sessie = request.getSession();
        InhoudBean1 inhoud = (InhoudBean1) sessie.getAttribute("inhoud");
        if (request.getParameter("submit") != null) {
            if (request.getParameter("submit").equals("Afronden") || request.getParameter("submit").equals("Volgende vraag")) {

                Vraag vraag = new Vraag();
                int newmoduleid = 0;
                int currentvraag = 0;
                dbManager = new Dbmanager();
                dbManager.openConnection();
                queryManager = new QueryManager(dbManager);

                if (request.getParameter("currentvraag") != null) {
                    currentvraag = Integer.parseInt(request.getParameter("currentvraag"));
                } else {

                    String address = "/leraar_home.jsp";
                    dbManager.closeConnection();
                    RequestDispatcher dispatcher = request.getRequestDispatcher(address);
                    dispatcher.forward(request, response);
                }
                
                if (request.getParameter("aantalnieuwevragen") != null) {
                    newmoduleid = Integer.parseInt(request.getParameter("newmoduleid"));
                    int aantalnieuwevragen = Integer.parseInt(request.getParameter("aantalnieuwevragen"));
                    request.setAttribute("newmoduleid", newmoduleid);
                    request.setAttribute("aantalnieuwevragen", aantalnieuwevragen);
                }

                Vraag aangepaste_vraag = new Vraag();

                if (request.getParameter("currentvraag") != null) {
                    if (request.getParameter("vraagstelling") != null) {
                        aangepaste_vraag.setVraagstelling(request.getParameter("vraagstelling"));
                    }

                    if (request.getParameter("antwoord-a") != null) {
                        aangepaste_vraag.setAntwoord_A(request.getParameter("antwoord-a"));
                    }

                    if (request.getParameter("antwoord-b") != null) {
                        aangepaste_vraag.setAntwoord_B(request.getParameter("antwoord-b"));
                    }

                    if (request.getParameter("antwoord-c") != null) {
                        aangepaste_vraag.setAntwoord_C(request.getParameter("antwoord-c"));
                    }

                    if (request.getParameter("antwoord-d") != null) {
                        aangepaste_vraag.setAntwoord_D(request.getParameter("antwoord-d"));
                    }

                    if (request.getParameter("juiste-antwoord") != null) {
                        aangepaste_vraag.setJuiste_antwoord(request.getParameter("juiste-antwoord"));
                    }
                    currentvraag += 1;
                    
                    queryManager.addselftestquestion(aangepaste_vraag, newmoduleid);
                }
             
                request.setAttribute("currentvraag", currentvraag);
                request.setAttribute("vraag", vraag);
                
                String address;

                if (request.getParameter("submit").equals(inhoud.getManageSTT4())) {
                    address = "subscribe_to_course";
                } else {
                    address = "/manage_selftest.jsp";
                }

                dbManager.closeConnection();
                RequestDispatcher dispatcher = request.getRequestDispatcher(address);
                dispatcher.forward(request, response);
            }

        } else {
            Vraag vraag = new Vraag();
            int newmoduleid;
            int currentvraag = 0;
            dbManager = new Dbmanager();
            dbManager.openConnection();
            queryManager = new QueryManager(dbManager);

            if (request.getParameter("aantalnieuwevragen") != null) {
                newmoduleid = Integer.parseInt(request.getParameter("newmoduleid"));
                int aantalnieuwevragen = Integer.parseInt(request.getParameter("aantalnieuwevragen"));
                request.setAttribute("newmoduleid", newmoduleid);
                request.setAttribute("aantalnieuwevragen", aantalnieuwevragen);
            }

            request.setAttribute("currentvraag", currentvraag);
            request.setAttribute("vraag", vraag);
            String address = "/manage_selftest.jsp";

            dbManager.closeConnection();
            RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request, response);
        }

    }
}
